package com.ruoyi.ldzlsc.service;

import com.ruoyi.ldzlsc.domain.ScWorkOrderTask;
import com.ruoyi.ldzlsc.domain.vo.*;

import java.util.List;

/**
 * 工单任务服务接口
 * 
 * @author ldzl
 */
public interface IScWorkOrderTaskService {
    
    /**
     * 查询工单任务列表
     * 
     * @param scWorkOrderTask 工单任务
     * @return 工单任务集合
     */
     List<ScWorkOrderTask> selectScWorkOrderTaskList(ScWorkOrderTask scWorkOrderTask);
    
    /**
     * 保存工单排程信息
     * 
     * @param workOrderId 工单ID
     * @param tasks 任务列表
     */
     void saveSchedule(Long workOrderId, List<ScWorkOrderTask> tasks);
    
    /**
     * 开工工序任务
     *
     * @param workOrderTaskId 工序任务ID
     * @return 结果
     */
     int startTask(Long workOrderTaskId);

    /**
     * 工序任务完成
     * @param workOrderTaskId 工序任务ID
     * @return 结果
     */
     int completeTask(Long workOrderTaskId);

    /**
     * 工序任务暂停
     * @param workOrderTaskId 工序任务ID
     * @return 结果
     */
     int pauseTask(Long workOrderTaskId);

    /**
     * 工序任务重启
     * @param workOrderTaskId 工序任务ID
     * @return 结果
     */
     int restartTask(Long workOrderTaskId);

    /**
     * 查询可报工的任务列表
     * @param query 查询条件
     * @return
     */
     List<ScTaskVo> selectReportableTaskList(ScTaskVo query);

    /**
     * 获取工序任务详情
     * @param workOrderTaskId 工序任务ID
     * @return 工序任务详情
     */
     WorkOrderTaskDetailVO getWorkOrderTaskDetail(Long workOrderTaskId);

    /**
     * 获取工序任务物料清单
     * @param workOrderTaskId 工序任务ID
     * @return 物料清单
     */
     List<TaskMaterialVO> getTaskMaterials(Long workOrderTaskId);

    /**
     * 获取工序任务报工记录
     * @param workOrderTaskId 工序任务ID
     * @return 报工记录
     */
     List<TaskReportVO> getTaskReports(Long workOrderTaskId);

    /**
     * 获取工序任务退料记录
     * @param workOrderTaskId 工序任务ID
     * @return 退料记录
     */
     List<TaskReturnVO> getTaskReturns(Long workOrderTaskId);

    /**
     * 获取工序任务执行进度
     * @param workOrderTaskId 工序任务ID
     * @return 执行进度
     */
     List<TaskProgressVO> getTaskProgress(Long workOrderTaskId);

    /**
     * 获取工序任务派工信息
     * @param workOrderTaskId 工序任务ID
     * @return 派工信息
     */
     WorkOrderTaskDetailVO.DispatchInfo getTaskDispatch(Long workOrderTaskId);
}